package com.dragonfly.shutter.utils;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.regex.Pattern;

/**
 * 将set的集合操作封装到list里去
 * @author 黄挺
 */
public class ListOperation {
	/**
	 * 计算两个集合的差集
	 * @param arg0 集合0
	 * @param arg1 集合1
	 * @return 集合0和集合1的不对称差集
	 */
	@SuppressWarnings("unchecked")
	public static List minus(List arg0, List arg1){
		List result = new ArrayList();
		
		if(arg0 == null){
			arg0 = new ArrayList();
		}
		
		if(arg1 == null){
			arg1 = new ArrayList();
		}
		
		Set set0 = new HashSet();
		Set set1 = new HashSet();
		
		set0.addAll(arg0);
		set1.addAll(arg1);
		set0.removeAll(set1);
		result.addAll(set0);
		
		return result;
	}
	
	/**
	 * 将string按特定的正则表达式分割并返回list
	 * @param string 需要分割的string
	 * @return string分割和组成的list
	 */
	public static List<String> stringToList(String string, String regex){
		List<String> result = new ArrayList<String>();
		String strings[] = string.split(regex);
		
		for (String str : strings){
			result.add(str);
		}
		
		return result;
	}
	
	/**
	 * 过滤链表中的非法字符
	 * @param list 链表 
	 * @return 是否含有非法的字符串
	 */
	public static boolean filtList( List<String> list ) {
		for ( String str : list ) {
			//包含SQL关键字
			if ( Pattern.matches("select|update|delete|exec|count|'|\"|=|;|>|<|%", str ) ){
				return true;
			}
			
			//标签的长度过长
			if ( str.length() > 100 ){
				return true;
			}
		}
		
		return false;
	}
}
